package com.tripcube.ai.service;

import com.tripcube.ai.model.dto.RagChatDTO;
import com.tripcube.ai.model.dto.MemoryChatDTO;
import com.tripcube.ai.model.vo.BaseChatVO;
import org.springframework.ai.chat.messages.Message;
import reactor.core.publisher.Flux;

import java.util.List;

/**
 * 记忆聊天服务接口
 * 提供具有上下文记忆功能的AI聊天服务，支持同步、异步、流式和RAG聊天
 * 
 * @author alander
 */
public interface MemoryChatService {
    /**
     * 记忆聊天
     * 基于会话ID进行具有上下文记忆的同步聊天
     * 
     * @param request 记忆聊天请求参数
     * @return 聊天响应内容
     */
    String chat(MemoryChatDTO request);

    /**
     * 带角色的记忆聊天
     * 基于指定角色和会话ID进行具有上下文记忆的同步聊天
     * 
     * @param request 记忆聊天请求参数
     * @param role 聊天角色设定
     * @return 聊天响应内容
     */
    String chatWithRole(MemoryChatDTO request, String role);

    /**
     * 获取会话历史消息
     * 根据会话ID获取该会话的所有历史消息记录
     * 
     * @param conversationId 会话ID
     * @return 历史消息列表
     */
    List<Message> getMessages(String conversationId);

    /**
     * 流式记忆聊天
     * 基于会话ID进行具有上下文记忆的流式聊天
     * 
     * @param request 记忆聊天请求参数
     * @return 流式聊天响应
     */
    Flux<String> streamChat(MemoryChatDTO request);

    /**
     * 带角色的流式记忆聊天
     * 基于指定角色和会话ID进行具有上下文记忆的流式聊天
     * 
     * @param request 记忆聊天请求参数
     * @param role 聊天角色设定
     * @return 流式聊天响应
     */
    Flux<String> streamChatWithRole(MemoryChatDTO request, String role);

    /**
     * RAG聊天
     * 基于检索增强生成(RAG)技术的同步聊天
     * 
     * @param request RAG聊天请求参数
     * @return 聊天响应结果
     */
    BaseChatVO ragChat(RagChatDTO request);

    /**
     * RAG流式聊天
     * 基于检索增强生成(RAG)技术的流式聊天
     * 
     * @param request RAG聊天请求参数
     * @return 流式聊天响应
     */
    Flux<String> ragStreamChat(RagChatDTO request);
}
